package cn.gok.oa.system.service.impl;

import cn.gok.oa.system.dto.MenuDto;
import cn.gok.oa.system.entity.TbMenu;
import cn.gok.oa.system.entity.TbMenuRole;
import cn.gok.oa.system.entity.TbRole;
import cn.gok.oa.system.mapper.TbMenuMapper;
import cn.gok.oa.system.mapper.TbMenuRoleMapper;
import cn.gok.oa.system.mapper.TbRoleMapper;
import cn.gok.oa.system.service.ITbMenuService;
import cn.gok.oa.system.vo.MenuVo;
import cn.gok.oa.util.JsonUtil;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author gok
 * @since 2022-08-04
 */
@Service
public class TbMenuServiceImpl extends ServiceImpl<TbMenuMapper, TbMenu> implements ITbMenuService {

    @Autowired
    TbMenuMapper tbMenuMapper;

    @Autowired
    TbRoleMapper tbRoleMapper;
    
    @Autowired
    TbMenuRoleMapper tbMenuRoleMapper;

    @Override
    public List<MenuVo> listAllMenu() {
        List<MenuVo> menuVos = JsonUtil.sendJson(tbMenuMapper.selectList(null));
        return menuVos;
    }

    @Override
    public List<MenuVo> menuListByRoleId(Integer roleId) {
        List<MenuVo> menuVos = JsonUtil.sendJson(tbMenuMapper.selectByRoleId(roleId));
        return menuVos;
    }


    //
//    @Transactional
//    public int addMenu(MenuDto menuDto, HttpServletRequest httpServletRequest) {
//        // 获取token
//        String token = httpServletRequest.getHeader("token");
//        // 获取token中的userId
//        Integer userId = Integer.parseInt(JWT.decode(token).getAudience().get(0));
//        TbMenu tbMenu = new TbMenu();
//        int insert1 = tbMenuMapper.insert(new TbMenu(menuDto.getMenuName(), menuDto.getUrl(), menuDto.getPid(), userId));
//        // 根据菜单名称获取菜单id
//        QueryWrapper<TbMenu> menuWrapper = new QueryWrapper();
//        menuWrapper.lambda().eq(TbMenu::getName,menuDto.getMenuName());
//        Integer menuId = tbMenuMapper.selectOne(menuWrapper).getId();
//        ArrayList<TbMenuRole> tbMenuRoles = new ArrayList<>();
//        for (String roleName: menuDto.getRoles()) {
//            // 根据角色名称获取角色id
//            QueryWrapper<TbRole> roleWrapper = new QueryWrapper();
//            roleWrapper.lambda().eq(TbRole::getName,roleName);
//            Integer roleId = tbRoleMapper.selectOne(roleWrapper).getId();
//            TbMenuRole tbMenuRole = new TbMenuRole(roleId, menuId);
//            tbMenuRoles.add(tbMenuRole);
//        }
//
//        int insert2 = tbMenuRoleMapper.addMenuRole(tbMenuRoles);
//        if (insert1>0 && insert2>0){
//            return 1;
//        }
//        throw new RuntimeException("插入异常,回滚");
//    }
//
//
//    @Override
//    @Transactional
//    public int deleteMenu(Integer menuId) {
//        // 根据菜单id获取菜单角色关系表id
//        QueryWrapper<TbMenuRole> menuRoleWrapper = new QueryWrapper();
//        menuRoleWrapper.lambda().eq(TbMenuRole::getMenuId,menuId);
//        Integer menuRoleId = tbMenuRoleMapper.selectOne(menuRoleWrapper).getId();
//        // 删除菜单角色关系表字段
//        int i1 = tbMenuRoleMapper.deleteById(menuRoleId);
//        // 删除菜单
//        int i2 = tbMenuMapper.deleteById(menuId);
//        if (i1>0 && i2>0){
//            return 1;
//        }
//        throw new RuntimeException("删除异常，回滚");
//    }
//
//    @Override
//    @Transactional
//    public int updateMenu(MenuDto menuDto) {
//        // 根据菜单id获取菜单角色关系表id
//        QueryWrapper<TbMenuRole> menuRoleWrapper = new QueryWrapper();
//        menuRoleWrapper.lambda().eq(TbMenuRole::getMenuId,menuDto.getId());
//        Integer menuRoleId = tbMenuRoleMapper.selectOne(menuRoleWrapper).getId();
//        // 删除菜单角色关系表字段
//        int i1 = tbMenuRoleMapper.deleteById(menuRoleId);
//        TbMenu tbMenu = new TbMenu(menuDto.getId(),menuDto.getMenuName(),menuDto.getUrl(),menuDto.getPid());
//        int i2 = tbMenuMapper.updateById(tbMenu);
//        List<TbMenuRole> roleMenus = new ArrayList<>();
//        for (String roleName: menuDto.getRoles()){
//            // 根据角色名称获取角色id
//            QueryWrapper<TbRole> roleWrapper = new QueryWrapper();
//            roleWrapper.lambda().eq(TbRole::getName,roleName);
//            Integer roleId = tbRoleMapper.selectOne(roleWrapper).getId();
//            TbMenuRole tbMenuRole = new TbMenuRole(roleId, menuDto.getId());
//            roleMenus.add(tbMenuRole);
//        }
//        int i3 = tbMenuRoleMapper.addMenuRole(roleMenus);
//        if (i1>0 && i2>0 && i3>0){
//            return 1;
//        }
//        throw new RuntimeException("插入异常，回滚");
//    }
}
